using SheLife.Domain.Entities;

namespace SheLife.Application.Interfaces;

/// <summary>
/// MQTT发布服务接口
/// </summary>
public interface IMqttPublishService
{
    /// <summary>
    /// 发布生理周期更新消息
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="currentDay">当前周期天数</param>
    /// <param name="nextPeriodDate">下次生理期日期</param>
    /// <param name="cycleLength">周期长度</param>
    /// <returns>任务</returns>
    Task PublishCycleUpdateAsync(Guid userId, int currentDay, DateTime? nextPeriodDate, int cycleLength);

    /// <summary>
    /// 发布症状记录消息
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="symptomType">症状类型</param>
    /// <param name="severity">严重程度</param>
    /// <param name="date">记录日期</param>
    /// <returns>任务</returns>
    Task PublishSymptomRecordAsync(Guid userId, string symptomType, int severity, DateTime date);

    /// <summary>
    /// 发布基础体温记录消息
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="temperature">体温</param>
    /// <param name="date">记录日期</param>
    /// <returns>任务</returns>
    Task PublishTemperatureRecordAsync(Guid userId, decimal temperature, DateTime date);

    /// <summary>
    /// 发布排卵期预测消息
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="ovulationDate">排卵期日期</param>
    /// <returns>任务</returns>
    Task PublishOvulationPredictionAsync(Guid userId, DateTime? ovulationDate);

    /// <summary>
    /// 发布健康提醒消息
    /// </summary>
    /// <param name="userId">用户ID</param>
    /// <param name="reminderType">提醒类型</param>
    /// <param name="message">提醒内容</param>
    /// <returns>任务</returns>
    Task PublishHealthReminderAsync(Guid userId, string reminderType, string message);
}